package com.utils
{
	import flash.display.Graphics;
	
	/**
	 *特殊图形绘制   可绘制同心圆（圆环），三角形，正多边形，正星型 
	 * @author Admin
	 */	
	public class GraphicUtil
	{
		/**
		 * 绘制圆环 
		 * @param g 目标绘图类
		 * @param minR 内半径
		 * @param maxR 外半径
		 * @param color 颜色
		 */		
		public static function drawConCircle(g:Graphics,color:uint,minR:Number,maxR:Number):void{
			g.clear();//绘制图形之前一定要将之前旧的数据先清除掉再绘制
			g.beginFill(color);
			g.drawCircle(0,0,minR);
			g.drawCircle(0,0,maxR);
			g.endFill();
		}
		
		/**
		 * 绘制三角形 
		 * @param g 目标绘图类
		 * @param color 颜色
		 * @param radius 半径
		 */		
		public static function drawTriangle(g:Graphics,color:uint,radius:Number):void{
			drawRegularPolygon(g,color,radius,3);
		}
		
		/**
		 * 绘制正多边形 
		 * @param g 目标绘图类
		 * @param color 颜色
		 * @param radius 半径
		 * @param sides 边数
		 * 
		 */		
		public static function drawRegularPolygon(g:Graphics,color:uint,radius:Number,sides:uint):void{
			if(sides < 3) throw Error('边数不正确!');
			g.clear();//绘制图形之前一定要将之前旧的数据先清除掉再绘制
			g.beginFill(color);
			for (var i:int = 0; i < sides; i++) 
			{
				var angle:Number = 360 /sides * i;
				var x:Number = Math.sin(angle* Math.PI / 180)*radius;
				var y:Number = -Math.cos(angle* Math.PI / 180)*radius;
				if(i == 0) g.moveTo(x,y);
				else g.lineTo(x,y);
			}
			g.endFill();
		}
		
		/**
		 * 绘制星形 
		 * @param g 目标绘图类
		 * @param color 颜色
		 * @param radius 半径
		 * @param angleNum 角数(>2)
		 */		
		public static function drawRegularStar(g:Graphics,color:uint,angleNum:uint,minR:Number,maxR:Number):void{
			if(angleNum < 3) throw Error('角数不正确!至少为3');
			g.clear();//绘制图形之前一定要将之前旧的数据先清除掉再绘制
			g.beginFill(color);
			
			for (var i:int = 0; i < angleNum*2; i++) 
			{
				if(i % 2 ==0){
					var angle:Number = (360 / angleNum) *(i/2);
					var radius:Number = maxR;
				}else{
					angle += (360 / angleNum) / 2;
					radius = minR;
				}
				var x:Number = Math.sin(angle* Math.PI / 180)*radius;
				var y:Number = -Math.cos(angle* Math.PI / 180)*radius;
				if(i == 0) g.moveTo(x,y);
				else g.lineTo(x,y);
			}
			g.endFill();
		}
		
		
		
	}
}